package org.example.spring.controller;

import org.example.spring.model.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/learn")//标识类，设置映射请求路径的初始信息。访问路径为类路径+方法路径
public class Cotroller {
    @RequestMapping("/r1")//标识方法，设置映射请求路径的具体信息
    public String r1(){
        return "hello";
    }
    @RequestMapping(value = "/r2" ,method = RequestMethod.GET)//可以通过method设置请求方式
    public String r2(){
        return "hello";
    }
    @RequestMapping("/r3")//接收普通类型参数，一般使用包装类型;可以接收单个参数，也可以接收多个参数，其中参数必须保持一致
    public String r3(String name,Integer age){
        return "姓名：" + name + "   年龄：" + age;
    }
    @RequestMapping("/r4")//接收对象
    public String r4(Model model){
        return model.toString();
    }
    @RequestMapping("/r5")//对后端接收参数重命名,其中@RequestParam绑定的参数，其请求参数只能和其声明的名称一致并且，参数为必传参数，可通过required来修改。
    public String r5(@RequestParam(value = "username" , required = false) String name){
        return name;
    }
    @RequestMapping("/r6")//接收数组
    public String r6(String[] name){
        return Arrays.toString(name);
    }
    @RequestMapping("/r7")//接收集合
    public String r7(@RequestParam List<String> name){
        return name.size() + "   list:" + name;
    }
    @RequestMapping("/r8")//接收JSON
    public String r8(@RequestBody Model model){
        return model.toString();
    }
    @RequestMapping("/r9/{id}")//接收url中的参数
    public String r9(@PathVariable Integer id){
        return id.toString();
    }
    @RequestMapping("/r10")//接收文件
    public String r10(@RequestPart MultipartFile file){
        return file.getOriginalFilename();
    }
}
